iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 1
24
Software Development

前端工程師用 javaScript 學演算法系列 第 1

開始用 javaScript 學演算法囉之前言

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20190902/20106426uyT2u250yM.jpg
找不到好看的資料結構圖硬是自己做了一張(前端工程師強迫症)

寫這個主題的動機?

在台灣當前端工程師七年後來到美國矽谷。以往的面試經驗都是看作品集然後問一些實務經驗,自認為實務經驗不算差,但沒想到來到國外後連第一關電話面試都過不了。(自信心大受打擊!完全從零開始啊)
原來美國不管你的經驗多豐富,第一步一定會考演算法跟資料結構!

演算法?? 不是 CS (Computer Science) 科系畢業的我,連演算法是什麼也一頭霧水。工作這麼久根本就沒用過什麼演算法,也沒想過什麼最佳解,還是可以完成專案啊!很不懂為什麼需要學,但為了找工作需要還是硬著頭皮開始刷演算法題庫。

最有名的演算法刷題網站就是 LeetCode 了。各大公司幾乎都會考裡面的題目,這邊的軟體工程師找工作前也一定都會到 LeetCode 上面刷題練功。
讓我相當意外的是,這次鐵人賽寫演算法/資料結構的人超多!!代表大家越來越看重,也不難預期未來台灣公司面試會考 LeetCode 了。 (前端真辛苦 T__T)

下圖表是世界各地用 LeetCode 的國家比例,雖然也是有 LintCode 等等其他有名刷題網站但比例跟下圖表差異不大。台灣竟然有佔到 3% 以上( 拍手!! )
https://ithelp.ithome.com.tw/upload/images/20190902/20106426otfXgDt8eG.png
本來以為背一下題庫解答就好,但事實是當我寫了第一題,不但花超過一個小時還寫不出來,最慘的是參考別人解答時,我根本不知道他在寫什麼...

a + b = (a ^ b) + (a & b) << 1 // ???

這時萌生應該要先把概念學好,刷題時才不會這麼痛苦。

演算法普遍給人印象都很硬看不懂,查找網路上資料後,發現這真的是事實,而且絕大多數分享文使用語言都不是 javaScript。所以這一系列會盡量用圖文以及日常生活例子,讓自己跟大家都好理解。

自我介紹一下

完全跟軟體無相關科系畢業,非常非常喜歡前端這個工作 (這行大家都喜歡分享也熱情投入),這三年專精在寫 JS, 覺得寫邏輯比切版有趣太多。

現在叫我要做網站出來並不是什麼難的事,但寫出效能佳、好維護的網站就是挑戰了。總覺得演算法是成為資深工程師的必要技能之一,他對於寫程式的邏輯與思路非常有幫助。另一方面 LeetCode 只能用原生 javaScript 撰寫,讓平常使用太多前端框架跟 library 的我可以重新複習核心 javaScript 觀念。

這條演算法學習路上對我自己而言並不容易 (跟平常開發專案真的南轅北轍),希望可以鼓勵不是本科系的也能夠會的 !

目錄

JavaScript 學演算法

什麼是演算法, Big O 是什麼等等

Data Structure

介紹常見的 Data Structure 例如 linked list、Array、Queue、Stack... 搭配 LeetCode 題目。 # 代表對應的 LeetCode 第幾題,之後鐵人賽結束會慢慢把解 LeetCode 思考過程筆記在 gitbook (2019/10 更新,題目 + 解題圖片已經全部更新在 gitbook 上了,應該會一直陸續增加直到找到理想工作為止 XD )

Algorithms

介紹常見排序,Binary search、Two pointer... 以及 LeetCode 解題

聊聊美國找工作以及面試經驗

介紹一些有趣題目以及面試經驗

以下是鐵人賽結束但持續寫的相關文章

前端比較少用到像 tree、graph 這種演算法 (然後這對我來說也是太進階了,所以文章裡就不討論囉)

這一系列誰適合看

  • 適合閱讀者
    會基本的程式(最好是JS),對演算法有點興趣但不知道怎麼開始,想把自己程式效能寫得更好
  • 不適合閱讀者
    連程式都沒寫過,或是已經對演算法、資料結構很厲害的高手 (因為我其實也開始沒多久)
如有錯誤或需要改進的地方,拜託跟我說。
我會以最快速度修改,感謝您

也歡迎追蹤我的部落格,除了技術文也會分享一些在矽谷工作的甘苦。


下一篇
什麼是演算法 (Algorithm)
系列文
前端工程師用 javaScript 學演算法32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
5
Yanwei Liu
iT邦新手 4 級 ‧ 2019-09-03 09:40:59

期待您的文章,我也是非CS想跨入這行業的人XD。但是資料結構跟演算法都沒學過

hannahpun iT邦新手 3 級 ‧ 2019-09-03 14:36:41 檢舉

感謝鼓勵 ~~ 讓我有動力繼續撐下去 /images/emoticon/emoticon02.gif

0
Grete Ma
iT邦新手 5 級 ‧ 2019-09-05 15:32:51

我也是非CS背景想吸收演算法知識~很期待你的作品!

hannahpun iT邦新手 3 級 ‧ 2019-09-06 00:15:37 檢舉

/images/emoticon/emoticon41.gif

0
阿瑜
iT邦研究生 3 級 ‧ 2019-09-07 17:42:06

我是雖然學過,但還是跟演算法還不熟但想學好演算法的人!
追隨您的腳步 ,希望可以進步 XD

阿尼 iT邦新手 5 級 ‧ 2019-09-10 23:44:07 檢舉

我也是XDD gogo!

hannahpun iT邦新手 3 級 ‧ 2019-09-12 01:50:10 檢舉

一起進步 ~~

0
微中子
iT邦新手 4 級 ‧ 2019-09-12 01:19:00

我喜歡 cover ~~

hannahpun iT邦新手 3 級 ‧ 2019-09-12 01:50:28 檢舉

/images/emoticon/emoticon07.gif

0
Simon from CEITL
iT邦新手 5 級 ‧ 2019-09-17 01:14:11

唉呀,我本來也想選這題目的
可惜太常加班,只能放棄開賽了

希望你可以堅持到底 ~~ XD

hannahpun iT邦新手 3 級 ‧ 2019-09-17 01:31:52 檢舉

我會加油的! 都超過一半了 /images/emoticon/emoticon02.gif

0
dick
iT邦新手 5 級 ‧ 2019-09-20 09:08:47

你好最近小弟想自學JavaScript可以分享學習過程嗎?另外可以分享學習資源嗎?謝謝

看更多先前的回應...收起先前的回應...
hannahpun iT邦新手 3 級 ‧ 2019-09-20 12:35:48 檢舉

我覺得鐵人賽很多很棒的文章,像 Kuro 重新認識 javaScript 我自己就很受用,當然不只他的文章啦.很多都很不錯

dick iT邦新手 5 級 ‧ 2019-09-23 11:51:03 檢舉

OK唷!謝謝你的建議

hannahpun iT邦新手 3 級 ‧ 2019-12-20 08:35:58 檢舉

最近在看 https://javascript.info/
非常非常推薦

dick iT邦新手 5 級 ‧ 2019-12-23 09:54:21 檢舉

謝謝ㄟ,剛剛看了一下就花了我一個小時謝謝分享,哈哈
程度真不好剛好可以再次複習一下

0
Charles
iT邦新手 5 級 ‧ 2019-09-22 13:32:05

很棒的文章! 對於非本科系剛入門前端領域的我很有幫助,加油!

hannahpun iT邦新手 3 級 ‧ 2019-09-22 23:49:45 檢舉

耶 謝謝鼓勵,自己也是學到蠻多的

0
grace
iT邦新手 5 級 ‧ 2019-10-09 08:24:14

加油....我也想知道要怎麼學習

我要留言

立即登入留言